import { get, post, put, del } from '@/utils/request'
import type { App, AppCategory } from '@/types/app'
import axios from 'axios'

const API_PREFIX = '/api/v1'

/**
 * 获取应用列表
 * @param params 查询参数
 * @returns 应用列表
 */
export const getAppList = (params?: any) => {
  return axios.get(`${API_PREFIX}/apps`, { params })
}

/**
 * 获取应用详情
 * @param id 应用ID
 * @returns 应用详情
 */
export const getAppDetail = (id: number) => {
  return axios.get(`${API_PREFIX}/apps/${id}`)
}

/**
 * 获取精选应用
 * @returns 精选应用列表
 */
export const getFeaturedApps = async (): Promise<App[]> => {
  try {
    const { data } = await axios.get(`${API_PREFIX}/apps/featured`)
    return data.data || []
  } catch (error) {
    console.error('获取精选应用失败', error)
    return []
  }
}

/**
 * 获取应用分类
 * @returns 应用分类列表
 */
export const getAppCategories = async (): Promise<AppCategory[]> => {
  try {
    const { data } = await axios.get(`${API_PREFIX}/app-categories`)
    return data.data || []
  } catch (error) {
    console.error('获取应用分类失败', error)
    return []
  }
}

/**
 * 根据分类ID获取应用列表
 * @param categoryId 分类ID
 * @returns 应用列表
 */
export const getAppsByCategoryId = async (categoryId: number): Promise<App[]> => {
  try {
    const { data } = await axios.get(`${API_PREFIX}/apps`, {
      params: { categoryId }
    })
    return data.data || []
  } catch (error) {
    console.error(`获取分类 ${categoryId} 下的应用失败`, error)
    return []
  }
}

/**
 * 创建应用
 * @param data 应用数据
 * @returns 创建结果
 */
export const createApp = (data: Partial<App>) => {
  return post<App>('/v1/apps', data)
}

/**
 * 更新应用
 * @param id 应用ID
 * @param data 应用数据
 * @returns 更新结果
 */
export const updateApp = (id: number, data: Partial<App>) => {
  return put<App>(`/v1/apps/${id}`, data)
}

/**
 * 删除应用
 * @param id 应用ID
 * @returns 删除结果
 */
export const deleteApp = (id: number) => {
  return del<void>(`/v1/apps/${id}`)
}

/**
 * 发布应用
 * @param id 应用ID
 * @returns 发布结果
 */
export const publishApp = (id: number) => {
  return put<App>(`/v1/apps/${id}/publish`)
}

/**
 * 下架应用
 * @param id 应用ID
 * @returns 下架结果
 */
export const unpublishApp = (id: number) => {
  return put<App>(`/v1/apps/${id}/unpublish`)
}

/**
 * 审核应用
 * @param id 应用ID
 * @param status 审核状态 1-通过 2-拒绝
 * @param comment 审核意见
 * @returns 审核结果
 */
export const auditApp = (id: number, status: number, comment: string) => {
  return put<App>(`/v1/apps/${id}/audit`, { status, comment })
} 